#include <Arduino.h>
#include <WString.h>
#include <SoftwareSerial.h>

#include "variableDefine.h"
#include "commandFun.h"
#include "print.h"
////////////////////////////////////////////////////////////////////////////////////////////////////
// 定义变量
extern portcfg pin_list[];
extern int pin_size;
String recvData;

#define esp8266_reset_pin D5
#define esp8266_tx_pin D7
#define esp8266_rx_pin D6
////////////////////////////////////////////////////////////////////////////////////////////////////
void setupPin() {
    for (auto i = 0; i < pin_size; i++) {
        pinMode(pin_list[i].port, OUTPUT);
    }
}

void niceDelay(int duration) {
    unsigned long startMillis = millis();
    while (millis() - startMillis < duration) {
        sqrt(4700);
    }
}
////////////////////////////////////////////////////////////////////////////////////////////////////

SoftwareSerial espSerial(esp8266_rx_pin, esp8266_tx_pin);	// rx, tx

////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
    Serial.begin(115200);   // ESP8266波特率
    while (!Serial) {
        ;
    }

    pinMode(esp8266_reset_pin, OUTPUT);
    digitalWrite(esp8266_reset_pin, LOW);

    setupPin();
    variableInit();
    recvData = "";

    espSerial.begin(9600);

    digitalWrite(esp8266_reset_pin, LOW);
    niceDelay(500);
    digitalWrite(esp8266_reset_pin, HIGH);

    sysPublish("start");
}

void loop() {
    char ch;
    while (espSerial.available() > 0) {
        ch = (char)espSerial.read();
        if(ch == 0) {
            continue;
        }
        if (ch == '\n') {
            deal(recvData);
            continue;
        }
        recvData += ch;
    }
}
